﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Libreria.DAL;
using System.ComponentModel.DataAnnotations;

namespace Libreria.SICOM.Modelo
{
    [CAD(true, CAD.TiposBD._SQLServer)]
    public class Lugar
    {

        public MOR accesoADatos;
        private Int32? identificador;
        private String nombre;
        private String latitud;
        private String latituddecimal;
        private String longitud;
        private String longituddecimal;
        private String foto;
        private String descripcion;
        private Int32? idtipodelugar;

          public Lugar()
         {

         }
         public Lugar(String CadenaDeConexion)
         {
             this.accesoADatos = MOR.Instance(CadenaDeConexion);
         }

        [Tipo(Tipo.TiposSQLServer._int, "LUG_ID", true, false)]
        [Required(ErrorMessage = " *** Campo Identificador obligatorio***")]
        public Int32? Identificador
        {
            get { return identificador; }
            set { identificador = value; }
        }

        [Tipo(Tipo.TiposSQLServer._varchar, "LUG_NOMBRE")]
        [Required(ErrorMessage = " *** Campo Nombre obligatorio***")]
        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        [Tipo(Tipo.TiposSQLServer._varchar, "LUG_LATITUD")]
       // [Required(ErrorMessage = " *** Campo Latitud obligatorio***")]
        public String Latitud
        {
            get { return latitud; }
            set { latitud = value; }
        }

        [Tipo(Tipo.TiposSQLServer._varchar, "LUG_LONGITUD")]
        //[Required(ErrorMessage = " *** Campo Longitud obligatorio***")]
        public String Longitud
        {
            get { return longitud; }
            set { longitud = value; }
        }

         [Tipo(Tipo.TiposSQLServer._int, "TIPL_ID")]
         [Required(ErrorMessage = " *** Campo Tipo de Lugar obligatorio***")]
        public Int32? Idtipodelugar
        {
            get { return idtipodelugar; }
            set { idtipodelugar = value; }
        }

        [Tipo(Tipo.TiposSQLServer._varchar, "LUG_FOTO")]
       /* [Required(ErrorMessage = " *** Campo Fotografia obligatorio***")]*/
        public string Foto
        {
            get { return foto; }
            set { foto = value; }
        }
        [Tipo(Tipo.TiposSQLServer._varchar, "LUG_DESCRIPCION")]
        [Required(ErrorMessage = " *** Campo Descripcion obligatorio***")]
        public string Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }

         [Tipo(Tipo.TiposSQLServer._varchar, "LUG_LATITUDDECIMAL")]
        public string Latituddecimal
        {
            get { return latituddecimal; }
            set { latituddecimal = value; }
        }
         [Tipo(Tipo.TiposSQLServer._varchar, "LUG_LONGITUDDECIMAL")]
        public string Longituddecimal
        {
            get { return longituddecimal; }
            set { longituddecimal = value; }
        }

        // Métodos de abstracción de datos
        public void crear()
        {
            this.accesoADatos.crearRegistro(this);
        }

        public List<Lugar> consultar()
        {
            List<Object> registros = this.accesoADatos.consultarRegistros(this, false);
            List<Lugar> resultado = new List<Lugar>();
            foreach (Object registro in registros)
            {
                resultado.Add((Lugar)registro);
            }
            return resultado;
        }

        public Lugar consultarPorIdentificador(Int32? identificador)
        {
            this.identificador = identificador;
            List<Object> registros = this.accesoADatos.consultarRegistros(this, true);
            Lugar resultado = null;
            if (registros != null)
            {
                if (registros.Count == 1)
                {
                    resultado = (Lugar)registros[0];
                }
            }
            return resultado;
        }

        public void actualizar()
        {
            this.accesoADatos.actualizarRegistro(this);
        }

        public void eliminar()
        {
            this.accesoADatos.borrarRegistro(this);
        }
    }
}
